package zuoye5.第四题;

import zuoye5.第四题.User;
import zuoye5.第四题.UserMessage;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

/**
 * 4. 编程题
 *
 *   使用基于 tcp 协议的编程模型实现将 UserMessage 类型对象由客户端发送给服务器；
 *
 *   服 务 器接 收到 对象 后判 断 用户 对象 信息 是否 为 "admin" 和 "123456"， 若 是则 将 UserMessage 对象中的类型改为"success"，否则将类型改为"fail"并回发给客户端，客户 端接收到服务器发来的对象后判断并给出登录成功或者失败的提示。
 *
 *   其中 UserMessage 类的特征有：类型(字符串类型) 和 用户对象(User 类型)。
 *
 *   其中 User 类的特征有：用户名、密码(字符串类型)。
 *
 *   如：
 *
 *                 UserMessage tum = new UserMessage("check", new User("admin", "123456"));
 */
public class ClientUserTest {
    public static void main(String[] args) {
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        Scanner sc = new Scanner(System.in);;
        try {
            //1.创建Socket类型的对象并提供服务器的主机名和端口号，我要连哪台服务器
            socket = new Socket("127.0.0.1",8888);
        /*
        2.使用输入输出流进行通讯
        这里因为传入的是对象，所以需要使用ObjectInputStream，进行对象的传输
        创建User对象和UserMessage对象
         */
            User user = new User();
            System.out.println("请输入姓名");
            String s1 = sc.nextLine();
            user.setUserName(s1);
            System.out.println("请输入密码");
            String s2 = sc.nextLine();
            user.setPassword(s2);
            UserMessage userMessage = new UserMessage("", user);
            //System.out.println(userMessage.toString());UserMessage{type='', user=User{userName='admin', password='123456'}}
            //获取一个输出流，将客户端信息发送到服务器
            oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject((Object) userMessage);
            //获取服务器传回的信息
            ois = new ObjectInputStream(socket.getInputStream());
            UserMessage um1 = (UserMessage)ois.readObject();
            if (um1.getType().equals("success")) {
                System.out.println("登录成功");
            }else {
                System.out.println("登录失败");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            //3.关闭客户端
            if (sc != null) {
                sc.close();
            }
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }
}
